package reflect;
import java.lang.reflect.Method;
/**
 * 通过反射机制访问类的私有成员
 * 暴力反射
 */
public class ReflectDemo7 {
    public static void main(String[] args) throws Exception {
        Class cls = Class.forName("reflect.Person");
        Object obj = cls.newInstance(); //Peron obj = new Person();
        /*
         getMethod()和getMethods():
         获取该类中的公开方法，包括从超类继承的

         getDeclaredMethod()和getDeclaredMethods():
         获取该类中的所有方法，包括私有的，但不包括从超类继承的
         */
        //Method method = cls.getMethod("say", String.class);//正确
        //Method method = cls.getMethod("hehe");    //运行时发生异常，因为Method()只能获取公开方法
        Method method = cls.getDeclaredMethod("hehe");
        method.setAccessible(true); //强制打开访问权限
        method.invoke(obj); //调用hehe()方法
        method.setAccessible(false);    //关闭访问权限
    }
}
